#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <set>

#define flr(x, l, r) for (int x = l; x <= r; ++x)
#define frl(x, r, l) for (int x = r; x >= l; --x)
#define fmp(x, t) for (int x = h[t]; ~x; x = ne[x])
#define LL long long
#define mt memset
#define my memcpy
#define szf sizeof
#define INF 0x3f3f3f3f
#define in(x) scanf("%d", &x)
#define out(x) printf("%d", x)
#define inll(x) scanf("%lld", &x)
#define outll(x) printf("%lld", x)
#define pn printf("\n")
#define con continue
#define bk break
#define vc vector
#define pb push_back
#define sz size
#define PII pair<int, int>
#define x first
#define y second
#define P_q priority_queue
#define ft front
#define pf push_front
#define popf pop_front
#define it insert
#define ct count

using namespace std;

int main() {
    int T;
    in(T);
    
    while (T -- ) {
        int n, m;
        in(m), in(n);
        
        printf("%d %d\n", m, (n + 1) / 2);
        int cnt = 0;
        P_q<int> down;
        P_q<int, vc<int>, greater<int>> up;
        
        flr (i, 1, n) {
            int x;
            in(x);
            
            if (down.empty() || x <= down.top()) down.push(x);
            else up.push(x);
            
            if (down.sz() > up.sz() + 1) up.push(down.top()), down.pop();
            if (up.sz() > down.sz()) down.push(up.top()), up.pop();
            
            if (i % 2) {
                printf("%d ", down.top());
                cnt ++ ;
                if (cnt % 10 == 0) pn;
            }
        }
        if (cnt % 10) pn;
    }

    return 0;
}